//request.js文件
import base from './baseUrl.js'
import mock from '@/mock/index.js' //模拟数据
import md5 from '../common/md5.min.js'
class Request {
  http(param) {
    //////// 正常请求
    // 请求参数
    let url = param.url
    let method = param.method
    let header = param.header || {}
    let data = Object.assign(param.data || {})
    let hideLoading = param.hideLoading || false
    let whetherData = param.whetherData
    //拼接完整请求地址
    let requestUrl = base.baseUrl + url
    //请求方式:GET或POST(POST需配置
    if (method) {
      method = method.toUpperCase() //小写改为大写
      data = Object.assign(data)
      if (method == 'POST') {
        header = Object.assign(
          {
            'content-type': 'application/json',
            // Token: uni.getStorageSync('token'),
          },
          param.header,
          {}
        )
      } else {
        header = Object.assign(
          {
            'content-type': 'application/json',
          },
          param.header,
          {
            // Token: uni.getStorageSync('token')
          }
        )
      }
    }
    //加载圈
    if (!hideLoading) {
      uni.showLoading({})
    }
    // 返回promise
    return new Promise((resolve, reject) => {
      // 请求
      uni.request({
        url: requestUrl,
        data: data,
        method: method,
        header: header,
        success: (res) => {
          //隐藏加载
          if (!hideLoading) {
            uni.hideLoading()
          }
          // 判断 请求是否成功
          if (res.data.code == 200 || res.data.code == 'Success') {
            //判断  接口返回列表中是否存在 data 列表 （因为接口不统一所以从这里判断 promise返回什么数据）
            if (whetherData) {
              // code判断:200成功,不等于200错误
              if (res.data.code == 200 || res.data.code == 'Success') {
                //成功
                resolve(res.data)
                return true
              } else {
                uni.showToast({
                  title: res.data.msg,
                  icon: 'none'
                })
                return false
              }
            } else {
              resolve(res.data)
              return true
            }
          } else {
            if (res.data.code == 401 || res.data.code == 10015) {
              // uni.removeStorage({ key: 'personID' })
              // uni.removeStorage({ key: 'userID' })
              // uni.removeStorage({ key: 'userName' })
              // uni.removeStorage({ key: 'personName' })
              // uni.removeStorage({ key: 'unitid' })
              // uni.removeStorage({ key: 'tokenTimestamp' })
              // uni.removeStorageSync('token')
              // uni.removeStorageSync('mobile')
              try {
                api.loginout()
              } catch (e) {}
              // uni.reLaunch({
              //   url: '/pages/login/entry'
              // })
            }
            uni.showToast({
              title: res.data.message || res.data.msg || res.data.error_msg,
              icon: 'error'
            })
            reject(res.data)
            return false
          }
        },
        //请求失败
        fail: (err) => {
          //隐藏加载
          if (!hideLoading) {
            uni.hideLoading()
          }
          return false
        },
        //请求完成
        complete() {
          return
        }
      })
    })
  }

  get(url, data, whetherData = true, header, hideLoading = false) {
    return new Request().http({
      url: url,
      method: 'GET',
      data: data,
      header: header,
      whetherData: whetherData,
      hideLoading
    })
  }

  post(url, data, whetherData = true, hideLoading = true, header) {
    return new Request().http({
      url: url,
      method: 'POST',
      data: data,
      header: header,
      whetherData: whetherData,
      hideLoading: hideLoading
    })
  }
}

// // 获取新的数字验签
// function getSignNew(url, data) {
//   if (!data) {
//     data = {}
//   }

//   const mid = ''
//   const V_YXKJ = uni.getStorageSync('V_YXKJ') || ''

//   if (typeof data == 'string') {
//     var datastring = JSON.parse(data)
//     datastring['mid'] = mid
//     datastring['V_YXKJ'] = V_YXKJ
//     data = JSON.stringify(datastring)
//   } else {
//     data['mid'] = mid
//     data['V_YXKJ'] = V_YXKJ
//   }

//   var sortedJson = {}
//   for (var item in data) {
//     if (typeof data[item] == 'undefined') {
//       data[item] = ''
//     }
//   }
//   //获取请求中URL的参数，如果存在者进入拼接到data中
//   if (url.lastIndexOf('?') + 1 > 0) {
//     var URlJson = url.substring(url.lastIndexOf('?') + 1).split('&')
//     for (var i in URlJson) {
//       data[URlJson[i].substring(0, URlJson[i].lastIndexOf('='))] = URlJson[i].substring(URlJson[i].lastIndexOf('=') + 1)
//     }
//     url = url.substring(0, url.lastIndexOf('?'))
//   }

//   var TopJson = []
//   var TopSFCZ = 0
//   if (typeof data == 'string') {
//     data = JSON.parse(data)
//   }
//   //判断 data 的格式是[] 还是 {}，如果是[]，则转成{}后排序
//   if (data[0]) {
//     TopSFCZ = 1
//     data = data[0]
//   }

//   var keys = Object.keys(data)
//   keys.sort(function (a, b) {
//     a = a.toLowerCase()
//     b = b.toLowerCase()
//     return a > b ? 1 : a == b ? 0 : -1
//   })
//   keys.forEach(function (key) {
//     if (typeof data[key] != 'object' || data[key] == null) {
//       sortedJson[key] = data[key] + ''
//     } else {
//       var dataTwo = data[key]
//       var keysTwo = Object.keys(dataTwo)
//       var sortedJsonTwo = {}
//       keysTwo.sort(function (a, b) {
//         a = a.toLowerCase()
//         b = b.toLowerCase()
//         return a > b ? 1 : a == b ? 0 : -1
//       })
//       keysTwo.forEach(function (keyTwo) {
//         if (typeof dataTwo[keyTwo] != 'object' || dataTwo[keyTwo] == null) {
//           sortedJsonTwo[keyTwo] = dataTwo[keyTwo] + ''
//         } else {
//           sortedJsonTwo[keyTwo] = dataTwo[keyTwo]
//         }
//       })
//       sortedJson[key] = sortedJsonTwo
//     }
//   })
//   //判断sortedJson初始的时候是否是[]，如果是，则转化为[]存入
//   if (TopSFCZ == 1) {
//     TopJson.push(sortedJson)
//     sortedJson = TopJson.concat(sortedJson)
//   }

//   const signNew = md5(JSON.stringify(sortedJson))
//   return { signNew, signData: { mid, V_YXKJ } }
// }

export default new Request()
